
package domainmodel;

/**
  * @author	OOP Team
  */
public class KaartSpel {
	private Kaart[] pak;

	public KaartSpel() throws IllegalArgumentException {
		pak = new Kaart[52];

		maakKaarten();
	}

	public void addKaart(Kaart kaart) throws IllegalArgumentException {
		if (kaart == null || indexOf(kaart) != -1){
		}
		
		int positie = zoekVrijePlaats();
		if (positie > -1) {
				pak[positie] = kaart;
		}
	}

	private int zoekVrijePlaats() {
		int positie = -1;
		for (int i = 0; i < pak.length && positie == -1; i++) {
			if (pak[i] == null) {
				positie = i;
			}
		}
		return positie;
	}

	private int indexOf(Kaart kaart) {
		int positie = -1;
		for (int i = 0; i < pak.length && positie == -1; i++) {
			if (pak[i] != null && pak[i].equals(kaart)) {
				positie = i;
			}
		}
		return positie;
	}

	private void maakKaarten() throws IllegalArgumentException {
		for (int i = 1, j = 0; i < 14; i++, j++) {
			Kaart kaart = new Kaart("Harten", i);
			pak[j] = kaart;
			j++;
			kaart = new Kaart("Schoppen", i);
			pak[j] = kaart;
			j++;
			kaart = new Kaart("Ruiten", i);
			pak[j] = kaart;
			j++;
			kaart = new Kaart("Klaveren", i);
			pak[j] = kaart;
		}
	}

	public Kaart getKaart(String type, int nummer) throws IllegalArgumentException {
		Kaart result = null;
		Kaart test = new Kaart(type, nummer);  //dient om IllegalArgumentException te krijgen bij foutieve kaarten
		int positie = -1;
		for (int i = 0; i < pak.length && positie == -1; i++) {
			if (pak[i] != null && pak[i].getType().equals(type) && pak[i].getNummer() == nummer) {
				positie = i;
			}
		}
			result = pak[positie];
			pak[positie] = null;
			
		return result;
	}

	public Kaart getKaart(int positie) throws IllegalArgumentException {
		if (positie < 1 || positie > 52) {
			throw new IllegalArgumentException("Ongeldige positie");
		}
		Kaart kaart = pak[positie - 1];
		pak[positie - 1] = null;
		return kaart;
	}

	public Kaart getKaart() throws IllegalArgumentException {
		Kaart result = null;

		String type = null;
		int nummer;
		
		while(result == null && getAantalKaarten() > 0){
			type = genereerType();
			nummer = genereerNummer();
			
			result = getKaart(type, nummer);
		}
		return result;
	}

	public int getAantalKaarten() throws IllegalArgumentException  {
		int result = 0;
		if (pak == null){
			 throw new IllegalArgumentException("Geen kaarten in het dek");
		}
		for(Kaart k : pak){
			if(k != null){
				result ++;
			}
		}
		return result;
	}

	private int genereerNummer() {
		int nummer = (int) ((Math.random() * 13) + 1);
		return nummer;
	}

	private String genereerType() {
		int typeNummer = (int) ((Math.random() * 4) + 1);
		String type = "Harten";
		if (typeNummer == 1) {
			type = "Ruiten";
		} else if (typeNummer == 2) {
			type = "Schoppen";
		} else if (typeNummer == 3) {
			type = "Klaveren";
		}
		return type;
	}


}
